
//    int setnonblocking(int fd);                             // 将fd设置为非阻塞
//    // 添加新用户(fd)， 第三个参数为true时设置为边缘触发
//    void addfd(int epollfd, int fd, bool enable_et);       
//    int epollDel(int fd, int epfd);                         // 删除epoll
//    int taskEnQueue(taskQueue_t *pTaskQueue, int netFd);    // 任务入队
//    int taskDeQueue(taskQueue_t *pTaskQueue);               // 任务出队
//    int tcpInit(char *ip, char *port, int *pSockFd)    
//    int factoryInit(factory_t *pFactory, int threadNum);    // 用于初始化factory对象的线程池
//   // 传输文件函数（未完善,函数体里的内容都可以修改，传输完成后设置runningFlag为0）
//    int transFile(int netFd);             
//    int handleEvent(int netFd, factory_t *pFactory);        // 线程要执行的操作
//    void cleanFunc(void *pArgs);                            // 线程清理
//    void* threadFunc(void *pArgs);
//    void makeWorker(factory_t *pFactory);                   // 用于线程池初始化，往线程池里创建线程

#include "func.h"
#include "function.h"

int setnonblocking(int fd)                              // 将fd设置为非阻塞
{
    int old_option = fcntl(fd, F_GETFL);
    int new_option = old_option | O_NONBLOCK;
    fcntl(fd, F_SETFL, new_option);
    return old_option;
}

void addfd(int epollfd, int fd, bool enable_et)         // 添加新用户(fd)， 第三个参数为true时设置为边缘触发
{
    struct epoll_event ev;
    ev.data.fd = fd;
    ev.events = EPOLLIN;
    if(enable_et)
        ev.events = EPOLLIN | EPOLLET;
    epoll_ctl(epollfd, EPOLL_CTL_ADD, fd, &ev);
    setnonblocking(fd);                                // 设置为非阻塞
    printf("fd added to epoll\n");
}


int tcpInit(char *ip, char *port, int *pSockFd)    
{
    *pSockFd = socket(AF_INET, SOCK_STREAM, 0);
    struct sockaddr_in addr;
    bzero(&addr, sizeof(struct sockaddr_in));
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr(ip);
    addr.sin_port = htons(atoi(port));
    int reuse = 1;
    int ret;
    ret = setsockopt(*pSockFd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse));
    ERROR_CHECK(ret, -1, "setsockopt");
    ret = bind(*pSockFd, (struct sockaddr *)&addr, sizeof(struct sockaddr_in));
    ERROR_CHECK(ret, -1, "bind");
    ret = listen(*pSockFd, 10);
    ERROR_CHECK(ret, -1, "listen");
    return 0;
}





